home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / find_service2.nasl < prev    next >
Text File  |  2005-03-31  |  39KB  |  1,258 lines

  1. #
  2. # This script was written by Michel Arboi <arboi@alussinan.org>
  3. #
  4. # It is released under the GNU Public Licence.
  5. #
  6. #
  7.  
  8. if(description)
  9. {
  10.  script_id(11153);
  11.  script_version ("$Revision: 1.133 $");
  12.  
  13.  name["english"] = "Identifies unknown services with 'HELP'";
  14.  name["francais"] = "Identifie les services inconnus avec 'HELP'";
  15.  script_name(english:name["english"], francais:name["francais"]);
  16.  
  17.  desc["english"] = "
  18. This plugin is a complement of find_service.nes
  19. It sends a HELP request to the remaining unknown services
  20. and tries to identify them.
  21.  
  22. Risk factor : Low";
  23.  
  24.  
  25.  desc["francais"] = "
  26. Ce plugin est un complΘment de find_service.nes
  27. Il envoie une requΩte HELP aux services qui restent inconnus et
  28. essaie de les identifier.
  29.  
  30. Facteur de risque : Faible";
  31.  
  32.  script_description(english:desc["english"], francais:desc["francais"]);
  33.  
  34.  summary["english"] = "Sends 'HELP' to unknown services and look at the answer";
  35.  summary["francais"] = "Envoie 'HELP' aux services inconnus et observe la rΘponse";
  36.  script_summary(english:summary["english"], francais:summary["francais"]);
  37.  
  38.  script_category(ACT_GATHER_INFO); 
  39.  script_timeout(0);
  40.  script_copyright(english:"This script is Copyright (C) 2002 Michel Arboi",
  41.         francais:"Ce script est Copyright (C) 2002 Michel Arboi");
  42.  script_family(english: "Service detection");
  43.  script_dependencie("find_service.nes", "find_service_3digits.nasl", "rpcinfo.nasl", "dcetest.nasl", "apache_SSL_complain.nasl", "doublecheck_std_services.nasl");
  44. # Do *not* add a port dependency  on "Services/unknown"
  45. # Some scripts must run after this script even if there are no
  46. # unknown services
  47.  exit(0);
  48. }
  49.  
  50. #
  51. include("misc_func.inc");
  52. include("global_settings.inc");
  53.  
  54. port = get_kb_item("Services/unknown");
  55. if (! port) exit(0);
  56. if (! get_port_state(port)) exit(0);
  57. if (known_service(port: port)) exit(0);
  58.  
  59. r0 = get_unknown_banner(port: port, dontfetch: 1);
  60. # Check only mute services?
  61. # if (r0) exit(0);
  62.  
  63. soc = open_sock_tcp(port);
  64. if (! soc) exit(0);
  65.  
  66. send(socket: soc, data: string("HELP\r\n"));
  67. r = recv(socket:soc, length:4096);
  68. close(soc);
  69. if (!r)
  70. {
  71.   # Mute service
  72.   # security_note(port: port, data: "A mute service is running on this port");
  73.   exit(0);
  74. }
  75.  
  76. set_kb_item(name: 'FindService/tcp/'+port+'/help', value: r);
  77.  
  78. # The full banner is (without end of line:
  79. # ( success ( 1 2 ( ANONYMOUS ) ( edit-pipeline ) ) )
  80. if ( "success ( 1 2"  >< r ) 
  81. {
  82.  register_service(port:port, proto:"subversion");
  83.  security_note(port:port, data:"A SubVersion server is running on this port");
  84.  exit(0);
  85. }
  86.  
  87. # xmlns='jabber:client' xmlns:
  88. # submitted by JYoung ~at- intramedplus.com 
  89. if ( "xmlns='jabber:client'" >< r)
  90. {
  91.  register_service(port:port, proto:"ejabberd");
  92.  security_note(port:port, data:"An ejabberd server is running on this port");
  93.  exit(0);
  94. }
  95.  
  96. if ("%x%s%p%nh%u%c%z%Z%t%i%e%g%f%a%C" >< r )
  97. {
  98.  register_service(port:port, proto:"egcd");
  99.  security_note(port:port, data:"egcd is running on this port");
  100.  exit(0);
  101. }
  102.  
  103. if ( "f6ffff10" >< hexstr(r) && strlen(r) < 6 )
  104. {
  105.  register_service(port:port, proto:"BackupExec");
  106.  security_note(port:port, data:"A BackupExec Agent is running on this port");
  107.  exit(0);
  108. }
  109.  
  110. if ('UNKNOWN COMMAND\n' >< r )
  111. {
  112.  register_service(port:port, proto:"clamd");
  113.  security_note(port:port, data:"A clamd daemon (part of ClamAntivirus) is running on this port");
  114.  exit(0);
  115. }
  116.  
  117. if ( "AdsGone 200" >< r && "HTML Ad" >< r )
  118. {
  119.  register_service(port:port, proto:"AdsGone");
  120.  security_note(port:port, data:"An AdsGone proxy server is running on this port");
  121.  exit(0);
  122. }
  123.  
  124. if (egrep(pattern:"^Centra AudioServer", string:r) )
  125. {
  126.  register_service(port:port, proto:"centra");
  127.  security_note(port:port, data:"A Centra audio server is running on this port");
  128.  exit(0);
  129. }
  130.  
  131. # TenFour TFS Secure Messaging Server, not RFC compliant
  132. if ('Ok\r\n500 Command unknown' >< r )
  133. {
  134.  register_service(port:port, proto:"smtp");
  135.  security_note(port:port, data:"A SMTP server is running on this port");
  136.  exit(0);
  137. }
  138.  
  139. if ("VERIFY = F$VERIFY" >< r || # Multinet 4.4 Imap daemon...
  140.     "* OK dovecot ready." >< r )
  141. {
  142.  register_service(port:port, proto:"imap");
  143.  security_note(port:port, data:"An IMAP server is running on this port");
  144.  exit(0);
  145. }
  146.  
  147.  
  148. if ("421 Server is temporarily unavailable - pleast try again later" >< r &&
  149.     "421 Service closing control connection" >< r)
  150. {
  151.  register_service(port:port, proto:"ftp-disabled");
  152.  security_note(port:port, data:"A (disabled) FTP server is running on this port");
  153.  exit(0);
  154. }
  155.  
  156.  
  157. if ("RSTP/1.0 505 RSTP Version not supported" >< r )
  158. {
  159.  register_service(port:port, proto:"rtsp");
  160.  security_note(port:port, data:"A RSTP (shoutcast) server is running on this port");
  161.  exit(0);
  162. }
  163.  
  164.  
  165. if ("ERR INVALID-ARGUMENT" >< r &&
  166.     "ERR UNKNOWN-COMMAND" >< r )
  167. {
  168.  register_service(port:port, proto:"nut");
  169.  security_note(port:port, data:"A Network UPS Tool (NUT) server is running on this port");
  170.  exit(0);
  171. }
  172.  
  173. if ( raw_string(0x80, 0x3d, 0x01, 0x03, 0x01) >< r )
  174. {
  175.  # http://osiris.shmoo.com/
  176.  register_service(port:port, proto:"osiris");
  177.  security_note(port:port, data:"An Osiris daemon is running on this port");
  178.  exit(0);
  179. }
  180. if ( raw_string(0x15, 0x03, 0x01) == r )
  181. {
  182.  register_service(port:port, proto:"APC_PowerChuteBusinessEdition");
  183.  security_note(port:port, data:"APC Power Chute Business Edition is running on this port");
  184.  exit(0);
  185. }
  186.  
  187. if ( 'CAP PH\r\n' >< r )
  188. {
  189.  register_service(port:port, proto:"BrightMail_AntiSpam");
  190.  security_note(port:port, data:"BrightMail AntiSpam is running on this port");
  191.  exit(0);
  192. }
  193. if ( raw_string(0xea, 0xdd, 0xbe, 0xef) >< r )
  194. {
  195.  register_service(port:port, proto:"veritas-netbackup-client");
  196.  security_note(port:port, data:"Veritas NetBackup Client Service is running on this port");
  197.  exit(0);
  198. }
  199.  
  200. # http://www.cisco.com/en/US/products/sw/voicesw/ps556/products_tech_note09186a00801a62b9.shtml#topic1
  201. if ( raw_string(0x70, 0x5f, 0x0a, 0x10, 0x01) >< r )
  202. {
  203.  register_service(port:port, proto:"cisco-ris-data-collector");
  204.  security_note(port:port, data:"A CISCO RIS Data Collector is running on this port");
  205.  exit(0);
  206. }
  207.  
  208.  
  209. if ("Hello, this is quagga" >< r )
  210. {
  211.  register_service(port:port, proto:"quagga");
  212.  security_note(port:port, data:"The quagga daemon is listening on this port");
  213.  exit(0);
  214. }
  215.  
  216. if ( 'Hello\n' >< r )
  217. {
  218.  register_service(port:port, proto:"musicdaemon");
  219.  security_note(port:port, data:"musicdaemon is listening on this port");
  220.  exit(0);
  221. }
  222.  
  223.  
  224.  
  225. if (egrep(pattern:"^220.*Administrator Service ready\.", string:r) ||
  226.     egrep(pattern:"^220.*eSafe@.*Service ready", string:r))
  227. {
  228.  register_service(port:port, proto:"smtp");
  229.  exit(0);
  230. }
  231.  
  232. if ( "Integrated port" >< r && "Printer Type" >< r && "Print Job Status" >< r)
  233. {
  234.   # This is a "fake" finger server, showing the printer status.
  235.   # see bug#496
  236.  register_service(port:port, proto:"finger-lexmark");
  237.  exit(0);
  238. }
  239.  
  240.  
  241. if ("Invalid password!!!" >< r || 
  242.     "Incorrect password!!!" >< r )
  243. {
  244.  register_service(port:port, proto:"wollf");
  245.  security_note(port:port, data:"A Wollf backdoor is running on this port");
  246.  exit(0);
  247. }
  248.  
  249. if ("version report" >< r )
  250. {
  251.  register_service(port:port, proto:"gnocatan");
  252.  security_note(port:port, data:"A gnocatan game server is running on this port");
  253.  exit(0);
  254. }
  255.  
  256. if ("Welcome on mldonkey command-line" >< r)
  257. {
  258.  register_service(port:port, proto:"mldonkey-telnet");
  259.  security_note(port:port, data:"A MLdonkey telnet interface is running on this port");
  260.  exit(0);
  261. }
  262.  
  263. if ( egrep(pattern:"^connected\. .*, version:", string:r) )
  264. {
  265.  register_service(port:port, proto:"subseven");
  266.  security_note(port:port, data:"A subseven backdoor is running on this port");
  267.  exit(0);
  268. }
  269.  
  270.  
  271. if ( egrep(pattern:"^220 Bot Server", string:r) ||
  272.      raw_string(0xb0, 0x3e, 0xc3, 0x77, 0x4d, 0x5a, 0x90) >< r )
  273. {
  274.  register_service(port:port, proto:"agobot.fo");
  275.  security_note(port:port, data:"An Agobot.fo backdoor is running on this port");
  276.  exit(0);
  277. }
  278.  
  279.  
  280. if ( "RemoteNC Control Password:" >< r )
  281. {
  282.  register_service(port:port, proto:"RemoteNC");
  283.  security_note(port:port, data:"A RemoteNC console is running on this port");
  284.  exit(0);
  285. }
  286.  
  287. if ( "Sensor Console Password:" >< r )
  288. {
  289.  register_service(port:port, proto:"fluxay");
  290.  security_note(port:port, data:"A fluxay sensor is running on this port");
  291.  exit(0);
  292. }
  293.  
  294. if (raw_string(0x3c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3e, 0x0a) >< r )
  295. {
  296.  register_service(port:port, proto:"gkrellmd");
  297.  security_note(port:port, data:"A gkrellmd system monitor daemon is running on this port");
  298.  exit(0);
  299. }
  300.  
  301. # QMTP / QMQP
  302. if (r =~ '^[1-9][0-9]*:[KZD]')
  303. {
  304.   register_service(port: port, proto: "QMTP");
  305.   security_note(port: port, data: "A QMTP / QMQP server is running on this port");
  306. }
  307.  
  308. # BZFlag Server (a game on SGI)
  309. if (r =~ '^BZFS')
  310. {
  311.  register_service(port:port, proto:"bzfs");
  312.  security_note(port:port, data:"A BZFlag game server seems to be running on this port");
  313.  exit(0);
  314. }
  315.  
  316. # (Solaris) lpd server
  317. if(ereg(pattern: "^Invalid protocol request.*:HHELP.*", string:r))
  318. {
  319.  register_service(port:port, proto:"lpd");
  320.  security_note(port:port, data:"An LPD server seems to be running on this port");
  321.  exit(0);
  322. }
  323.  
  324. if (strlen(r) == 4 && raw_string(0x3d, 0x15, 0x1a, 0x3d) >< r )
  325. {
  326.  register_service(port:port, proto:"hacker_defender");
  327.  security_note(port:port, data:"An 'Hacker Defender' backdoor seems to be running on this port");
  328.  exit(0);
  329. }
  330.  
  331. # http://hea-www.harvard.edu/RD/ds9/
  332. if ("XPA$ERROR unknown xpans request:" >< r )
  333. {
  334.  register_service(port:port, proto:"DS9");
  335.  security_note(port:port, data:'A DS9 service seems to be running on this port\nSee also : http://hea-www.harvard.edu/RD/ds9/');
  336.  exit(0);
  337. }
  338.  
  339. if ('421 Unauthorized connection to server\n' >< r )
  340. {
  341.  register_service(port:port, proto:"ncic");
  342.  security_note(port:port, data:"A NCIC service seems to be running on this port");
  343.  exit(0);
  344. }
  345.  
  346. if ( strlen(r) == 4 && raw_string(0x09, 0x50, 0x09, 0x50) ><  r )
  347. {
  348.  register_service(port:port, proto:"dell_management_client");
  349.  security_note(port:port, data:"A Dell Management client seems to be running on this port");
  350.  exit(0);
  351. }
  352.  
  353. if ( "gdm already running. Aborting!" >< r )
  354. {
  355.  register_service(port:port, proto:"xdmcp");
  356.  security_note(port:port, data:"An xdmcp server seems to be running on this port");
  357.  exit(0);
  358. }
  359.  
  360. if ( strlen(r) == strlen("20040616105304") &&
  361.       ereg(pattern:"200[0-9][01][0-9][0-3][0-9][0-2][0-9][0-5][0-9][0-5][0-9]$",
  362.        string:r))
  363.  {
  364.  register_service(port:port, proto:"LPTOne");
  365.  security_note(port:port, data:"A LPTOne server seems to be running on this port");
  366.  exit(0);
  367. }
  368.  
  369. if ('ERROR Not authenticated\n' >< r )
  370. {
  371.  register_service(port:port, proto:"hpjfpmd");
  372.  security_note(port:port, data:"An HP WebJetAdmin server seems to be running on this port");
  373.  exit(0);
  374. }
  375.  
  376. if ( "500 P-Error" >< r && "220 Hello" >< r )
  377. {
  378.  register_service(port:port, proto:"unknown_irc_bot");
  379.  security_note(port:port, data:"An IRC bot seems to be running on this port");
  380.  exit(0);
  381. }
  382.  
  383. if ( "220 WinSock" >< r )
  384. {
  385.  register_service(port:port, proto:"winsock");
  386.  security_note(port:port, data:"A WinSock server seems to be running on this port");
  387.  exit(0);
  388. }
  389.  
  390. if ( "DeltaUPS:" >< r )
  391. {
  392.  register_service(port:port, proto:"delta-ups");
  393.  security_note(port:port, data:"A DeltaUPS monitoring server seems to be running on this port");
  394.  exit(0);
  395. }
  396.  
  397. if ( ereg(pattern:"lpd: .*", string:r) )
  398. {
  399.  register_service(port:port, proto:"lpd");
  400.  security_note(port:port, data:"An LPD server seems to be running on this port");
  401.  exit(0);
  402. }
  403.  
  404. if(ereg(pattern: "^/usr/sbin/lpd.*", string:r))
  405. {
  406.  register_service(port:port, proto:"lpd");
  407.  security_note(port:port, data:"An LPD server seems to be running on this port");
  408.  exit(0);
  409. }
  410.  
  411. if ( "<!doctype html" >< tolower(r) ) 
  412. {
  413.  register_service(port:port, proto:"www");
  414.  security_note(port:port, data:"A (non-RFC compliant) web server seems to be running on this port");
  415.  exit(0);
  416. }
  417. if("An lpd test connection was completed" >< r || 
  418.     "Bad from address." >< r || 
  419.     "your host does not have line printer access" >< r ||
  420.     "does not have access to remote printer" >< r )
  421. {
  422.  register_service(port:port, proto:"lpd");
  423.  security_note(port:port, data:"An LPD server seems to be running on this port");
  424.  exit(0);
  425. }
  426.  
  427. # PPR
  428. if (r =~ "^lprsrv: unrecognized command:")
  429. {
  430.   register_service(port:port, proto:"lpd");
  431.   security_note(port:port, data:"PPR seems to be running on this port");
  432.   exit(0);
  433. }
  434.  
  435. if(ereg(pattern:"^login: Password: (Login incorrect\.)?$", string:r) ||
  436.    ereg(pattern:"^login: Login incorrect\.", string:r))
  437. {
  438.  register_service(port:port, proto:"uucp");
  439.  security_note(port:port, data:"An UUCP daemon seems to be running on this port");
  440.  exit(0);
  441. }
  442. if(ereg(pattern:"^login: Login incorrect\.$", string:r))
  443. {
  444.  register_service(port:port, proto:"uucp");
  445.  security_note(port:port, data:"An UUCP daemon seems to be running on this port");
  446.  exit(0);
  447. }
  448.  
  449. # IRC server
  450. if (ereg(pattern: "^:.* 451 .*:", string:r))
  451. {
  452.   register_service(port: port, proto: "irc");
  453.   security_note(port: port, data: "An IRC server seems to be running on this port");
  454.   exit(0);
  455. }
  456.  
  457. if(ereg(pattern:"^(Mon|Tue|Wed|Thu|Fri|Sat|Sun|Lun|Mar|Mer|Jeu|Ven|Sam|Dim) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|D[eΘ]c|F[eΘ]v|Avr|Mai|Ao[u√]) *([0-9]|[1-3][0-9]) [0-9]+:[0-9]+(:[0-9]+)?( *[ap]m)?( +[A-Z]+)? [1-2][0-9][0-9][0-9].?.?$",
  458.         string:r) ||
  459.    ereg(pattern:"^[0-9][0-9] +(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|D[eΘ]c|F[eΘ]v|Avr|Mai|Ao[u√]) +[1-2][0-9][0-9][0-9] +[0-9]+:[0-9]+:[0-9]+( *[ap]m)? [A-Z0-9]+.?.?$", string:r, icase: 1) ||
  460.    r =~ '^(0?[0-9]|[1-2][0-9]|3[01])-(0[1-9]|1[0-2])-20[0-9][0-9][\r\n]*$' ||
  461.    r =~ '^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] (19|20)[0-9][0-9]-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])[ \t\r\n]*$')
  462. {
  463.  register_service(port:port, proto: "daytime");
  464.  exit(0);
  465. }
  466.  
  467. # Another flavor of daytime
  468. if(ereg(pattern:"^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (January|February|March|April|May|June|July|August|September|October|November|December) ([0-9]|[1-3][0-9]), [1-2][0-9][0-9][0-9] .*", string:r))
  469. {
  470.   register_service(port:port, proto:"daytime");
  471.   exit(0);
  472. }
  473.  
  474. # MS flavor of daytime
  475. if(ereg(pattern:"^[0-9][0-9]?:[0-9][0-9]:[0-9][0-9] [AP]M [0-9][0-9]?/[0-9][0-9]?/[0-2][0-9][0-9][0-9].*$", string:r))
  476. {
  477.  register_service(port:port, proto:"daytime");
  478.  exit (0);
  479. }
  480.  
  481. # Banner:
  482. # HP OpenView OmniBack II A.03.10:INET, internal build 325, built on Mon Aug 23 15:50:58 1999. 
  483. if (match(string: r, pattern: "HP OpenView OmniBack II*"))
  484. {
  485.   register_service(port: port, proto: "omniback");
  486.   security_note(port: port, data: "HP Omniback seems to be running on this port");
  487.   exit(0);
  488. }
  489.  
  490. # Banner:
  491. # HP OpenView Storage Data Protector A.05.00: INET, internal build 190, built on Tue Jul 16 17:37:32 2002.
  492. if (match(string: r, pattern: "HP OpenView Storage Data Protector"))
  493. {
  494.   register_service(port: port, proto: "hpov-storage");
  495.   security_note(port: port, data: "HP OpenView Storage Data Protector seems to be running on this port");
  496.   exit(0);
  497. }
  498.  
  499. # Veritas Netbackup
  500. if (r =~ '^1000 +2\n43\nunexpected message received' ||
  501.     "gethostbyaddr: No such file or directory" >< r )
  502. {
  503.   register_service(port: port, proto: "netbackup");
  504.   security_note(port: port, data: "Veritas Netbackup seems to be running on this port");
  505.   exit(0);
  506. }
  507.  
  508. # Veritas Backup Exec Remote Agent (6103/tcp)
  509. if (r == '\xf6\xff\xff\xff\x10')
  510. {
  511.   register_service(port: port, proto: "backup_exec");
  512.   security_note(port: port, data: "Veritas Backup Exec Remote Agent seems to be running on this port");
  513.   exit(0);
  514. }
  515.  
  516. # BMC Patrol
  517. if (r == "SDPACK")
  518. {
  519.   register_service(port: port, proto: "bmc-perf-sd");
  520.   security_note(port: port, data: "BMC Perform Service Daemon seems to be running on this port");
  521.   exit(0);
  522. }
  523.  
  524. # SNPP
  525. if (r =~ '^220 .* SNPP ' || egrep(string: r, pattern: '^214 .*PAGE'))
  526. {
  527.   register_service(port: port, proto: "snpp");
  528.   security_note(port: port, data: "A SNPP server seems to be running on this port");
  529.   exit(0);
  530. }
  531.  
  532. # HylaFax FTP
  533. if (egrep(string: r, pattern: '^214-? ') && 'MDMFMT' >< r)
  534. {
  535.   register_service(port: port, proto: "hylafax-ftp");
  536.   security_note(port: port, data: "A HylaFax server seems to be running on this port");
  537.   exit(0);
  538. }
  539.  
  540.  
  541. # HylaFAX  (hylafax spp?)
  542. if ( egrep(string:r, pattern:"^220.*HylaFAX .*Version.*") )
  543. {
  544.   register_service(port: port, proto: "hylafax");
  545.   security_note(port: port, data: "A HylaFax server seems to be running on this port");
  546.   exit(0);
  547. }
  548.  
  549.  
  550. # IRCn
  551. if (strlen(r) == 2048 && r =~ '^[ ,;:.@$#%+HMX\n-]+$' && '-;;=' >< r &&
  552.     '.;M####+' >< r && '.+ .%########' >< r && ':%.%#########@' >< r)
  553. {
  554.   register_service(port: port, proto: 'IRCn-finger');
  555.   security_note(port: port, data: "IRCn finger service seems to be running on this port");
  556.   exit(0);
  557. }
  558.  
  559. if ("Melange Chat Server" >< r)
  560. {
  561.   register_service(port: port, proto: 'melange-chat');
  562.   security_note(port: port, data: "Melange Chat Server is running on this port");
  563.   exit(0);
  564. }
  565.  
  566. # http://www.directupdate.net/
  567. if (r =~ '^OK Welcome .*DirectUpdate server')
  568. {
  569.   register_service(port: port, proto: 'directupdate');
  570.   security_note(port: port, data: "A DirectUpdate server is running on this port");
  571.   exit(0);
  572. }
  573.  
  574. # http://www.xboxmediaplayer.de
  575.  
  576. if (r == "HELLO XBOX!")
  577. {
  578.   register_service(port: port, proto: 'xns');
  579.   security_note(port: port, data: "A XNS streaming server seems to be running on this port");
  580.   exit(0);
  581. }
  582.  
  583. # Windows 2000 BackupExec
  584.  
  585. if (r == '\xf6\xff\xff\xff\x10')
  586. {
  587.   register_service(port: port, proto: "backupexec");
  588.   security_note(port: port, data: "A BackupExec server seems to be running on this port");
  589.   exit(0);
  590. }
  591.  
  592. # SAP/DB niserver (default port = 7269)
  593. # 0000 4c 00 00 00 03 ff 00 00 ff ff ff ff ff ff ff ff
  594. # 0020 01 00 04 00 4c 00 00 00 00 02 34 00 ff 0d 00 00
  595. # 0040 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
  596. # 0060 00 00 00 00 2e 0f 13 40 00 00 00 00 89 74 09 08
  597. # 0100 05 49 2d 31 00 04 50 ff ff 03 52 01
  598.  
  599. if (substr(r, 0, 15) == hex2raw(s: "4c00000003ff0000ffffffffffffffff"))
  600. {
  601.   register_service(port: port, proto: "sap_db_niserver");
  602.   security_note(port: port, data: "SAP/DB niserver seems to be running on this port");
  603.   exit(0);
  604. }
  605.  
  606. # Submitted by Lyal Collins
  607. # 00: 01 09 d0 02 ff ff 01 03 12 4c .. . ...L
  608. # DB2 V6 and possibly Db2 V7, running on zOS - TCP ports 446 and 448
  609. if (r == '\x01\x09\xD0\x02\xFF\xFF\x01\x03\x12\x4C')
  610. {
  611.   register_service(port: port, proto: "db2");
  612.   security_note(port: port, data: "DB2 is running on this port");
  613.   exit(0);
  614. }
  615.  
  616. # Checkpoint FW-1 Client Authentication (TCP/259)
  617. # 00: 43 68 65 63 6b 20 50 6f 69 6e 74 20 46 69 72 65 Check Point Fire
  618. # 10: 57 61 6c 6c 2d 31 20 43 6c 69 65 6e 74 20 41 75 Wall-1 Client Au
  619. # 20: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 53 65 72 thentication Ser
  620. # 30: 76 65 72 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 67 ver running on g
  621. # 40: 61 74 65 6b 65 65 70 65 72 30 31 2e 6b 61 69 73 atekeeper01.kais
  622. # 50: 65 72 6b 72 61 66 74 2e 64 65 0d 0a 0d ff fb 01 erkraft.de... .
  623. # 60: ff fe 01 ff fb 03 55 73 65 72 3a 20 47 45 54 20 . .User: GET
  624. # 70: 2f 20 48 54 54 50 2f 31 2e 30 0d 0a 55 73 65 72 / HTTP/1.0..User
  625. # 80: 20 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 30 20 GET / HTTP/1.0
  626. # 90: 6e 6f 74 20 66 6f 75 6e 64 0d 0a 0d 0d 0a 55 73 not found.....Us
  627. # a0: 65 72 3a 20 er: 
  628.  
  629. if ("Check Point FireWall-1 Client Authentication Server" >< r)
  630. {
  631.   register_service(port: port, proto: "fw1_client_auth");
  632.   security_note(port: port, data: "Checkpoint Firewall-1 Client Authentication Server seems to be running on this port");
  633.   exit(0);
  634. }
  635.  
  636. if (r =~ "^200 .* (PWD Server|poppassd)")
  637. {
  638.   register_service(port: port, proto: "poppassd");
  639.   security_note(port: port, data: "A poppassd server seems to be running on this port");
  640.   exit(0);
  641. }
  642.  
  643. # Ebola antivirus
  644.  
  645. if ("Welcome to Ebola " >< r )
  646. {
  647.  register_service( port : port, proto: "ebola" );
  648.  set_kb_item(name:"ebola/banner/" + port, value: r );
  649.  security_note(port : port, data: "An Ebola server is running on this port :\n" + r );
  650.  exit(0);
  651. }
  652.  
  653. # www.midas.org
  654. if (r =~ '^MIDASd v[2-9.]+[a-z]? connection accepted')
  655. {
  656.   register_service(port: port, proto: 'midas');
  657.   security_note(port: port, data: "A MIDAS server is running on this port");
  658.   exit(0);
  659. }
  660.  
  661. # Crystal Reports
  662. if (r =~ '^server [0-9.]+ connections: [0-9]+')
  663. {
  664.   register_service(port: port, proto: 'crystal');
  665.   security_note(port: port, data: 'Crystal Reports seems to be running on this port');
  666.   exit(0);
  667. }
  668.  
  669. # Trueweather taskbar applet
  670. if (r =~ '^TrueWeather\r\n\r\n')
  671. {
  672.   register_service(port: port, proto: 'trueweather');
  673.   security_note(port: port, data: 'TrueWeather taskbar applet is running on this port');
  674.   exit(0);
  675. }
  676.  
  677. # W32.IRCBot.E or W32.IRCBot.F or W32.Randex or W32.Korgo.V
  678. if (r == '220 \r\n331 \r\n230 \r\n')
  679. {
  680.   register_service(port: port, proto: 'ircbot');
  681.   security_note(port: port, data: 'A W32.IRCBot backdoor is running on this port');
  682.   exit(0);
  683. }
  684.  
  685. if (ereg(string: r, pattern: "^RTSP/1\.0 "))
  686. {
  687.   register_service(port: port, proto: 'rtsp');
  688.   security_note(port: port, data: "A streaming server is running on this port");
  689.   exit(0);
  690. }
  691.  
  692. # BMC's ECS product (part of Control-M) gateway listener
  693. # 00: 61 20 30 30 30 30 30 30 32 64 47 52 30 39 33 32    a 0000002dGR0932
  694. # 10: 30 30 30 30 39 30 43 47 47 41 54 45 57 41 59 20    000090CGGATEWAY 
  695. # 20: 30 43 47 55 31 30 30 33 31 30 30 36 30 43 47 5f    0CGU100310060CG_
  696. # 30: 41 20 32 32 31 47 41                               A 221GA
  697. if (r =~ '^a [0-9a-zA-Z]+GATEWAY [0-9A-Z]+_A [0-9A-Z]+')
  698. {
  699.   register_service(port: port, proto: 'ctrlm-ecs-gateway');
  700.   security_note(port: port, data: "An ECS gateway listener (par of Control-M) is running on this port");
  701.   exit(0);
  702. }
  703.  
  704. # Running on 400/tcp?!
  705. if (r == '\xDE\xAD\xF0\x0D')
  706. {
  707.   register_service(port: port, proto: 'jwalk');
  708.   security_note(port: port, data: "A Seagull JWalk server is running on this port");
  709.   exit(0);
  710. }
  711.  
  712. # Contributed by Thomas Reinke - running on TCP/23
  713. # Interface to ADSL router smc7204BRB 
  714. if ("CONEXANT SYSTEMS, INC" >< r && "ACCESS RUNNER ADSL CONSOLE PORT" >< r 
  715.     && "LOGON PASSWORD" >< r)
  716. {
  717.   register_service(port: port, proto: 'conexant-admin');
  718.   security_hole(port: port, data: "Interface of a Conexant ADSL router is running on this port");
  719.   exit(0);
  720. }
  721.  
  722. # Default port = 9090
  723. if (r == 'GET %2F HTTP%2F1.0\n')
  724. {
  725.   register_service(port: port, proto: 'slimserver');
  726.   security_hole(port: port, data: "The Slimserver streaming server (command interface)
  727. is running on this port");
  728.   exit(0);
  729. }
  730.  
  731. # 00: 0d 0a 50 72 65 73 73 20 72 65 74 75 72 6e 3a 2a    ..Press return:*
  732. # 10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    ****************
  733. # 20: 0d 0a 45 6e 74 65 72 20 50 61 73 73 77 6f 72 64    ..Enter Password
  734. # 30: 3a 2a 0d 0a 45 6e 74 65 72 20 50 61 73 73 77 6f    :*..Enter Passwo
  735. #  40: 72 64 3a
  736. if ('Press return:*****************' >< r && 'Enter Password:' >< r)
  737. {
  738.   register_service(port: port, proto: 'darkshadow-trojan');
  739.   security_hole(port: port, data: "The Darshadow trojan horse seems to be running on this port");
  740.   exit(0);
  741. }
  742.  
  743. # Contributed by David C. Shettler
  744. # http://esupport.ca.com/index.html?/public/dto_transportit/infodocs/LI57895.asp
  745. if (r == 'ACK')
  746. {
  747.   register_service(port: port, proto: 'tng-cam');
  748.   security_hole(port: port, data: 'CA Messaging (part of Unicenter TNG) is running on this port');
  749.   exit(0);
  750. }
  751.  
  752. # Contributed by Jan Dreyer - unfortunately, I could not find much data on 
  753. # this Trojan horse. It was found running on port 2400
  754. # The banner is:
  755. # +------------------------+
  756. # | DllTrojan by ScriptGod |
  757. # +------------------------+
  758. # |       [27.04.04]       |
  759. # +------------------------+
  760. # enter pass:
  761. #
  762.  
  763. if ("+------------------------+" >< r || "DllTrojan by ScriptGod" >< r)
  764. {
  765.   register_service(port: port, proto: 'dll-trojan');
  766.   security_hole(port: port, data: 'A trojan horse (DllTrojan) seems to be running on this port\nClean your system!');
  767.  
  768.   exit(0);
  769. }
  770.  
  771. # Submitted by Paul Weatherhead
  772. if (r == '\x3d\x15\x1a\x3d')
  773. {
  774.   register_service(port: port, proto: 'rcserv-trojan');
  775.   security_hole(port: port, data: 'A trojan horse (RCServ) seems to be running on this port\nYou should clean your system:\nthe executable file might be MDTC.EXE');
  776.   exit(0);
  777. }
  778.  
  779. if (r == 'ERROR\n')
  780. {
  781.   register_service(port: port, proto: 'streaming21');
  782.   security_note(port: port, data: "A Streaming21 server seems to be running on this port");
  783.   exit(0);
  784. }
  785.  
  786. # Submitted by Adam Baldwin - Reference http://evilpacket.net
  787. # Identifies Symantec ManHunt or SNS console (qsp proxy)
  788. # 32 bytes of data sent when a connection is made
  789. # 01 01 00 08 1C EE 01 00 00 00 00 00 00 00 00 00
  790. # 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  791. if (r == '\x01\x01\x00\x08\x1c\xee\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
  792. {
  793.   register_service(port: port, proto: 'qsp-proxy');
  794.   security_note(port: port, data: "A Symantec ManHunt / SNS console (QSP Proxy) seems to be running on this port");
  795.   exit(0);
  796. }
  797.  
  798. # sunRay Server - thanks to kent@unit.liu.se (Kent Engstr÷m)
  799. if("ERR/InvalidCommand" >< r) 
  800. {
  801.  register_service(port:port, proto:"sunraySessionMgr");
  802.  security_note(port:port, data:"sunraySessionMgr server is running on this port");
  803.  exit(0);
  804. }
  805.   
  806. # Shoutcast
  807.  
  808. if (r =~ "^ICY 401")
  809. {
  810.   register_service(port: port, proto: "shoutcast");
  811.   security_note(port: port, data: "A shoutcast server seems to be running on this port");
  812.   exit(0);
  813. }
  814.  
  815. # MS DTC
  816.  
  817. ##if (r = '\x08\x10\x0B')
  818. if (strlen(r) == 3 && r[2] == '\x10'||    # same test as find_service
  819.     r == '\x78\x01\x07' || r == '\xE8\x2B\x0B' || r == '\x88\x54\x0b' ||
  820.     r == '\x38\x26\x0b' ||
  821.     r == '\x10\xf4\x0b' || r == '\x70\x82\x0b' || r == '\x78\x01\x07')
  822. {
  823.   register_service(port: port, proto: "msdtc");
  824.   security_note(port: port, data: "A MSDTC server seems to be running on this port");
  825.   exit(0);
  826. }
  827.  
  828. # NFR
  829. if (egrep(pattern:"^Getserver 1\.0 - identify yourself", string:r ) )
  830. {
  831.  register_service(port:port, proto:"nfr-admin-gui");
  832.  security_note(port:port, data:"An NFR Administrative interface is listening on this port");
  833.  exit(0);
  834. }
  835.  
  836. # remstats.sf.net
  837. if ( "ERROR: unknown directive: " >< r )
  838. {
  839.   register_service(port:port, proto:"remstats");
  840.   security_note(port:port, data:"A remstats service is running on this port");
  841.   exit(0);
  842. }
  843.  
  844. if ( "NCD X Terminal Configuration" >< r )
  845. {
  846.   register_service(port:port, proto:"ncdx_term_config");
  847.   security_note(port:port, data:"A NCD X Terminal Configuration service is running on this port");
  848.   exit(0);
  849. }
  850.  
  851. if ("NPC Telnet permit one" >< r )
  852. {
  853.   register_service(port:port, proto:"telnet");
  854.   security_note(port:port, data:"A (NPC) telnet service is running on this port");
  855.   exit(0);
  856. }
  857.  
  858. if ( "SiteManager Proxy" >< r )
  859. {
  860.   register_service(port:port, proto:"site_manager_proxy");
  861.   security_note(port:port, data:"A Site Manager Proxy service is running on this port");
  862.   exit(0);
  863. }
  864.  
  865. if ( egrep(pattern:"^GPSD,.*", string:r) )
  866. {
  867.   register_service(port:port, proto:"gpsd");
  868.   security_note(port:port, data:"A gpsd daemon is running on this port");
  869.   exit(0);
  870. }
  871.  
  872.  
  873. if ( egrep(pattern:"^200.*Citadel(/UX| server ready).*", string:r) )
  874. {
  875.   register_service(port:port, proto:"citadel/ux");
  876.   security_note(port:port, data:"A Citadel/UX BBS is running on this port");
  877.   exit(0);
  878. }
  879.  
  880. if ( "Gnome Batalla" >< r )
  881. {
  882.  register_service(port:port, proto:"gnome_batalla");
  883.  security_note(port:port, data:"A Gnome Batalla service is running on this port");
  884.   exit(0);
  885. }
  886.    
  887. if ("System Status" >< r && "Uptime" >< r )
  888. {
  889.   register_service(port:port, proto: "systat");
  890.   security_note(port: port, data: "The systat service is running on this port");
  891.   exit(0);
  892. }
  893.  
  894. if ("ESTABLISHED" >< r && "TCP" >< r)
  895. {
  896.   register_service(port:port, proto: "netstat");
  897.   security_note(port: port, data: "The netstat service is running on this port");
  898.   exit(0);
  899. }
  900.  
  901. if ( "Charles Dickens" >< r || "George Bernard Shaw" >< r )
  902. {
  903.   register_service(port:port, proto: "qotd");
  904.   security_note(port: port, data: "qotd (Quote of the Day) seems to be running on this port");
  905.   exit(0);
  906. }
  907.  
  908. if ("Can't locate loadable object for module" >< r && "BEGIN failed--compilation aborted" >< r )
  909. {
  910.   register_service(port:port, proto: "broken-perl-script");
  911.   security_note(port: port, data: "A broken perl script is running on this port");
  912.   exit(0);
  913. }
  914.  
  915. if ("/usr/games/fortune: not found" >< r )
  916. {
  917.   register_service(port:port, proto: "qotd");
  918.   security_note(port: port, data: "qotd (Quote of the Day) seems to be running on this port (misconfigured)");
  919.   exit(0);
  920. }
  921.  
  922. if ("Check Point FireWall-1 authenticated Telnet server" >< r )
  923. {
  924.   register_service(port:port, proto: "fw1-telnet-auth");
  925.   security_note(port: port, data: "A Firewall-1 authenticated telnet server is running on this port");
  926.   exit(0);
  927. }
  928.  
  929. if ( "NOTICE AUTH : Bitlbee" >< r )
  930. {
  931.   register_service(port:port, proto: "irc");
  932.   security_note(port: port, data: "An IRC server seems to be running on this port");
  933.   exit(0);
  934. }
  935.  
  936. if (r =~ '^sh-[0-9.]+# ')
  937. {
  938.   register_service(port:port, proto: "wild_shell");
  939.   security_hole(port: port, data: "A shell seems to be running on this port ! (this is a possible backdoor)");
  940. }
  941.  
  942. if ( "1|0|0||" >< r )
  943. {
  944.   register_service(port:port, proto: "PigeonServer");
  945.   security_note(port: port, data: "PigeonServer seems to be running on this port");
  946.   exit(0);
  947. }
  948.  
  949. if (r =~ '^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\n$')
  950. {
  951.  register_service(port:port, proto:"kde-lisa");
  952.  security_note(port:port, data:"KDE Lisa server is running on this port");
  953.  exit(0);
  954. }
  955.  
  956. # Submitted by Lucian Ravac - See http://zabbix.org
  957. if (r == 'ZBX_NOTSUPPORTED\n')
  958. {
  959.  register_service(port: port, proto: 'zabbix');
  960.  security_note(port: port, data: 'A Zabbix agent is running on this port');
  961.  exit(0);
  962. }
  963.  
  964. # Submitted by Brian Spindel - Gopher on Windows NT
  965. # 00: 33 20 2d 2d 36 20 42 61 64 20 52 65 71 75 65 73    3 --6 Bad Reques
  966. # 10: 74 2e 20 0d 0a 2e 0d 0a                 t. 
  967.  
  968. if (r == '3 --6 Bad request. \r\n.\r\n') 
  969. {
  970.  register_service(port: port, proto: 'gopher');
  971.  security_note(port: port, data: 'A Gopher server seems to be running on this port');
  972.  exit(0);
  973. }
  974.  
  975. # 00: 01 72 6c 6f 67 69 6e 64 3a 20 50 65 72 6d 69 73 .rlogind: Permis
  976. # 10: 73 69 6f 6e 20 64 65 6e 69 65 64 2e 0d 0a sion denied... 
  977.  
  978. if (match(string: r, pattern: '\x01rlogind: Permission denied*', icase: 1))
  979. {
  980.  register_service(port: port, proto: 'rlogin');
  981.  security_note(port: port, data: 'rlogind seems to be running on this port');
  982.  exit(0);
  983. }
  984.  
  985. # If you do not want to "double check", uncomment the next two lines
  986. # if (! r0) set_unknown_banner(port: port, banner: r);
  987. # exit(0);
  988.  
  989. ########################################################################
  990. #                   **** WARNING ****                                  #
  991. # Do not add anything below unless it should handled by find_service   #
  992. # or find_service_3digits                                              #
  993. # The exception is qotd -- look at the bottom of the file              #
  994. ########################################################################
  995.  
  996. function report_and_exit(port, data, hole)
  997. {
  998.   if (hole)
  999.     security_hole(port: port, data: data);
  1000.   else
  1001.     security_note(port: port, data: data);
  1002.  
  1003.   if (report_verbosity > 1)
  1004.     security_warning(port: port, data:
  1005. "The service on this port should have been already identified
  1006. by other plugins.
  1007. find_service2 worked around this but your report might be incomplete.
  1008. You should increase the read timeout and rerun Nessus against this 
  1009. target");
  1010.   exit(0);
  1011. }
  1012.  
  1013. ########################################################################
  1014. # All the following services should already have been identified by    #
  1015. # find_service.nes; anyway, we double check in case it failed...       #
  1016. ########################################################################
  1017.  
  1018. # Spamd (port 783) - permissive Regex, just in case
  1019. if (r =~ '^SPAMD/[0-9.]+ [0-9]+ Bad header line:')
  1020. {
  1021.  register_service(port:port, proto:"spamd");
  1022.  report_and_exit(port:port, data:"A SpamAssassin daemon is running on this port");
  1023. }
  1024.  
  1025. # SOCKS5
  1026. if (ord(r[0]) == 5 && ord(r[1]) <= 8 && ord(r[2]) == 0 && ord(r[3]) <= 4)
  1027. {
  1028.   register_service(port: port, proto: "socks5");
  1029.   report_and_exit(port: port, data: "A SOCKS5 server seems to be running on this port");
  1030. }
  1031.  
  1032. # SOCKS4
  1033. if (ord(r[0]) == 0 && ord(r[1]) >= 90 && ord(r[1]) <= 93)
  1034. {
  1035.   register_service(port: port, proto: "socks4");
  1036.   report_and_exit(port: port, data: "A SOCKS4 server seems to be running on this port");
  1037. }
  1038.  
  1039. if (egrep(pattern:"^\+OK.*POP2.*", string:r, icase:1) )
  1040. {
  1041.   register_service(port:port, proto:"pop2");
  1042.   report_and_exit(port: port, data: "A pop2 server seems to be running on this port");
  1043. }
  1044.  
  1045. else if (egrep(pattern:"^\+OK.*POP.*", string:r, icase:1) )
  1046. {
  1047.   register_service(port:port, proto:"pop3");
  1048.   report_and_exit(port: port, data: "A pop3 server seems to be running on this port");
  1049. }
  1050.    
  1051.  
  1052. # FTP - note that SMTP & SNPP also return 220 & 214 codes
  1053. if (egrep(pattern:"^220 .*FTP", string:r, icase: 1) ||
  1054.     egrep(pattern:"^214-? .*FTP", string: r, icase: 1) ||
  1055.     egrep(pattern:"^220 .*CrownNet", string: r, icase: 1) ||
  1056.     (egrep(pattern:"^220 ", string:r) 
  1057.      && egrep(pattern: "^530 Please login with USER and PASS", string: r, icase: 1) )
  1058.    )
  1059. {
  1060.   banner = egrep(pattern:"^2[01][04]-? ", string: r);
  1061.   k = string("ftp/banner/", port);
  1062.   set_kb_item(name: k, value: banner);
  1063.   register_service(port: port, proto: "ftp");
  1064.   report_and_exit(port: port, data: "A FTP server seems to be running on this port");
  1065. }
  1066.  
  1067. # SMTP
  1068. if (egrep(pattern:"^220( |-).*(SMTP|mail)", string:r, icase: 1) ||
  1069.     egrep(pattern:"^214-? .*(HELO|MAIL|RCPT|DATA|VRFY|EXPN)", string: r) ||
  1070.     egrep(pattern:"^220-? .*OpenVMS.*ready", string: r) ||
  1071.     egrep(pattern:"^421-? .*SMTP", string: r))
  1072. {
  1073.   banner = egrep(pattern:"^2[01][04]-? ", string: r);
  1074.   k = string("smtp/banner/", port);
  1075.   set_kb_item(name: k, value: banner);
  1076.   register_service(port: port, proto: "smtp");
  1077.   report_and_exit(port: port, data: "A SMTP server seems to be running on this port");
  1078. }
  1079.  
  1080. # NNTP
  1081. if (egrep(pattern: "^200 .*(NNTP|NNRP)", string: r) ||
  1082.     egrep(pattern: "^100 .*commands", string: r, icase: 1))
  1083. {
  1084.   banner = egrep(pattern:"^200 ", string: r);
  1085.   if (banner)
  1086.   {
  1087.     k = string("nntp/banner/", port);
  1088.     set_kb_item(name: k, value: banner);
  1089.   }
  1090.   register_service(port: port, proto: "nntp");
  1091.   report_and_exit(port: port, data: "A NNTP server seems to be running on this port");
  1092. }
  1093.  
  1094. # SSH
  1095. banner = egrep(pattern: "^SSH-", string: r);
  1096. if (banner)
  1097. {
  1098.   register_service(port: port, proto: "ssh");
  1099.   report_and_exit(port: port, data: "A SSH server seems to be running on this port");
  1100. }
  1101.  
  1102. # Auth
  1103. if (egrep(string: r, pattern:"^0 *, *0 *: * ERROR *:") )
  1104. {
  1105.   register_service(port: port, proto: "auth");
  1106.   report_and_exit(port: port, data: "An Auth/ident server seems to be running on this port");
  1107. }
  1108.  
  1109. # Finger
  1110. if ((egrep(string: r, pattern: "HELP: no such user", icase: 1)) ||
  1111.     (egrep(string :r, pattern: ".*Line.*User.*Host", icase:1)) ||
  1112.     (egrep(string:r, pattern:".*Login.*Name.*TTY", icase:1)) ||
  1113.     '?Sorry, could not find "GET"' >< r ||
  1114.     'Login name: HELP' >< r  ||
  1115.     (('Time Since Boot:' >< r) && ("Name        pid" >< r) ))
  1116. {
  1117.   register_service(port: port, proto: "finger");
  1118.   report_and_exit(port: port, data: "A finger server seems to be running on this port");
  1119. }
  1120.  
  1121. # HTTP
  1122.  
  1123. if (("501 Method Not Implemented" >< r) || (ereg(string: r, pattern: "^HTTP/1\.[01]")) || "action requested by the browser" >< r)
  1124. {
  1125.   register_service(port: port, proto: "www");
  1126.   report_and_exit(port: port, data: "A web server seems to be running on this port");
  1127. }
  1128.  
  1129. # BitTorrent - no need to send anything to get the banner, in fact
  1130. if (r =~ "^BitTorrent protocol")
  1131. {
  1132.   register_service(port: port, proto: "BitTorrent");
  1133.   report_and_exit(port: port, data: "A BitTorrent server seems to be running on this port");
  1134. }
  1135.  
  1136. # Jabber (http://www.jabber.org) detection (usually on 5222/tcp).
  1137.  
  1138. if (r =~ "<stream:error>Invalid XML</stream:error>")
  1139. {
  1140.   register_service(port: port, proto: "jabber");
  1141.   report_and_exit(port: port, data: "A jabber server seems to be running on this port");
  1142. }
  1143.  
  1144. # Zebra vty
  1145. if ("Hello, this is zebra " >< r)
  1146. {
  1147.   register_service(port: port, proto: "zebra");
  1148.   set_kb_item(name: "zebra/banner/"+port, value: r);
  1149.   report_and_exit(port: port, data: "A zebra daemon is running on this port");
  1150. }
  1151.  
  1152. # IMAP4
  1153.  
  1154. if (egrep(pattern:"^\* *OK .* IMAP", string:r) )
  1155. {
  1156.   register_service(port: port, proto: "imap");
  1157.   set_kb_item(name: "imap/banner/"+port, value: r);
  1158.   report_and_exit(port: port, data: "An IMAP server is running on this port");
  1159. }
  1160.  
  1161. if ("cvs [pserver]" >< r )
  1162. {
  1163.   register_service(port: port, proto: "cvspserver");
  1164.   report_and_exit(port: port, data: "A CVS pserver is running on this port");
  1165. }
  1166.  
  1167. if ( '"IMPLEMENTATION" "Cyrus timesieved"' >< r )
  1168. {
  1169.   register_service(port: port, proto: "cyrus-timsieved");
  1170.   report_and_exit(port: port, data: "Cyrus timesived is running on this port");
  1171. }
  1172.  
  1173.  
  1174. if ("@ABCDEFGHIJKLMNOPQRSTUV" >< r )
  1175. {
  1176.   register_service(port:port, proto: "chargen");
  1177.   report_and_exit(port: port, data: "A chargen server is running on this port");
  1178. }
  1179.  
  1180. if ( egrep(pattern:":Welcome!.*NOTICE.*psyBNC", icase:TRUE, string:r ) ) 
  1181. {
  1182.   register_service(port:port, proto: "psyBNC");
  1183.   report_and_exit(port: port, data: "psyBNC seems to be running on this port");
  1184. }
  1185.  
  1186. if ( "CCProxy Telnet Service Ready" >< r )
  1187. {
  1188.   register_service(port:port, proto: "ccproxy-telnet");
  1189.   security_note(port: port, data: "CCProxy (telnet) seems to be running on this port");
  1190.   exit(0);
  1191. }
  1192.  
  1193. if ( "CCProxy FTP Service" >< r )
  1194. {
  1195.   register_service(port:port, proto: "ccproxy-ftp");
  1196.   security_note(port: port, data: "CCProxy (ftp) seems to be running on this port");
  1197.   exit(0);
  1198. }
  1199. if ( "CCProxy " >< r  && "SMTP Service Ready" >< r )
  1200. {
  1201.   register_service(port:port, proto: "ccproxy-smtp");
  1202.   security_note(port: port, data: "CCProxy (smtp) seems to be running on this port");
  1203.   exit(0);
  1204. }
  1205.  
  1206. if ( "CMailServer " >< r  && "SMTP Service Ready" >< r )
  1207. {
  1208.   register_service(port:port, proto: "cmailserver-smtp");
  1209.   security_note(port: port, data: "CMailServer (smtp) seems to be running on this port");
  1210.   exit(0);
  1211. }
  1212.  
  1213. # 0000000 30 11 00 00 00 00 00 00 d7 a3 70 3d 0a d7 0d 40
  1214. #          0 021  \0  \0  \0  \0  \0  \0   ╫   ú   p   =  \n   ╫  \r   @
  1215. # 0000020 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00
  1216. #         \0  \0  \0  \0  \0  \0  \0  \0 001  \0  \0  \0 001  \0  \0  \0
  1217. # 0000040 00 00 00 00 02 00 00 00
  1218. #         \0  \0  \0  \0 002  \0  \0  \0
  1219. # 0000050
  1220.  
  1221. if (r =~ '^\x30\x11\x00\x00\x00\x00\x00\x00\xd7\xa3')
  1222. {
  1223.   register_service(port: port, proto: 'dameware');
  1224.   security_note(port: port, data: "Dameware seems to be running on this port");
  1225.   exit(0);
  1226. }
  1227.  
  1228. if ( "Open DC Hub, version" >< r  && "administrators port" >< r )
  1229. {
  1230.   register_service(port:port, proto: "opendchub");
  1231.   security_note(port: port, data: "Open DC Hub Administrative interface (peer-to-peer) seems to be running on this port");
  1232.   exit(0);
  1233. }
  1234.  
  1235. if ( egrep(pattern:"^BZFS00", string:r) )
  1236. {
  1237.   register_service(port:port, proto:"bzFlag");
  1238.   security_note(port: port, data: "A bzFlag server seems to be running on this port");
  1239.   exit(0);
  1240.   
  1241. }
  1242.  
  1243. #
  1244. # Keep qotd at the end of the list, as it generates false detection
  1245. #
  1246. if (egrep(pattern: "^[A-Za-z. -]+\([0-9-]+\)", string: r))
  1247. {
  1248.   register_service(port:port, proto: "qotd");
  1249.   security_note(port: port, data: "qotd seems to be running on this port");
  1250.   exit(0);
  1251. }
  1252.  
  1253. ########################################################################
  1254. #             Unidentified service                                     #
  1255. ########################################################################
  1256.  
  1257. if (! r0) set_unknown_banner(port: port, banner: r);
  1258.